package com.screen.screendisplay.service.electric;

import com.screen.screendisplay.entity.electric.ElectricSafetyenvPlantRt;
import com.screen.screendisplay.vo.electric.PlantAnnualEmissionStatistics;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 火电安全环保电厂实时数据表 服务类
 * </p>
 *
 * @author xuesong
 * @since 2025-09-24
 */
public interface ElectricSafetyenvPlantRtService extends IService<ElectricSafetyenvPlantRt> {

    /**
     * 根据年份查询电厂实时数据
     * @param year 年份
     * @return 电厂实时数据列表
     */
    List<ElectricSafetyenvPlantRt> getByYear(Integer year);

    /**
     * 根据年份和月份查询电厂实时数据
     * @param year 年份
     * @param month 月份
     * @return 电厂实时数据列表
     */
    List<ElectricSafetyenvPlantRt> getByYearAndMonth(Integer year, Integer month);

    /**
     * 根据年份、月份和日期查询电厂实时数据
     * @param year 年份
     * @param month 月份
     * @param day 日期
     * @return 电厂实时数据列表
     */
    List<ElectricSafetyenvPlantRt> getByDate(Integer year, Integer month, Integer day);

    /**
     * 根据电厂编码查询实时数据
     * @param plantCode 电厂编码
     * @return 电厂实时数据列表
     */
    List<ElectricSafetyenvPlantRt> getByPlantCode(String plantCode);

    /**
     * 根据公司编码查询实时数据
     * @param companyCode 公司编码
     * @return 电厂实时数据列表
     */
    List<ElectricSafetyenvPlantRt> getByCompanyCode(String companyCode);

    /**
     * 查询超标排放数据
     * @param year 年份
     * @param month 月份（可为空）
     * @return 超标排放数据列表
     */
    List<ElectricSafetyenvPlantRt> getExcessiveEmission(Integer year, Integer month);

    /**
     * 统计电厂月度排放汇总数据
     * @param year 年份
     * @param month 月份
     * @param plantCode 电厂编码
     * @return 月度排放汇总数据
     */
    ElectricSafetyenvPlantRt getMonthlyStatistics(Integer year, Integer month, String plantCode);

    /**
     * 查询排放趋势数据（按日期）
     * @param year 年份
     * @param month 月份
     * @param plantCode 电厂编码
     * @return 日度排放趋势数据
     */
    List<ElectricSafetyenvPlantRt> getDailyTrend(Integer year, Integer month, String plantCode);

    /**
     * 检查是否存在超标排放
     * @param year 年份
     * @param month 月份
     * @return 是否存在超标排放
     */
    boolean hasExcessiveEmission(Integer year, Integer month);

    /**
     * 获取电厂当月排放达标率
     * @param year 年份
     * @param month 月份
     * @param plantCode 电厂编码
     * @return 排放达标率（百分比）
     */
    Double getComplianceRate(Integer year, Integer month, String plantCode);

    /**
     * 获取电厂最新实时数据
     * @param plantCode 电厂编码
     * @return 最新实时数据
     */
    ElectricSafetyenvPlantRt getLatestDataByPlant(String plantCode);

    /**
     * 获取公司下所有电厂的最新数据
     * @param companyCode 公司编码
     * @return 公司下所有电厂最新数据列表
     */
    List<ElectricSafetyenvPlantRt> getLatestDataByCompany(String companyCode);

    /**
     * 按电厂维度统计年度排放累计数据
     * @param year 年份
     * @return 电厂年度排放统计数据列表
     */
    List<PlantAnnualEmissionStatistics> getPlantAnnualEmissionStatistics(Integer year);
}
